<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <script>
        /* 
            题目描述：输入一个整型数组，数组中的一个或者多个整数组成一个子数组，求所有子数组的和的最大值
            例：输入 [-2,1,-3,4,-1,2,1,-5,4] 
                输出：6
                解释：连续子数组[4,-1,2,1] 的和最大，为 6。
    
        */
       /* 
            1.确定状态：
                f(n)表示以截止到当前索引n的连续子数组的最大和，
            2.转移方程：
                f(n) = f(n - 1)>0 ? f(n -1) + arr[n] : a[n]
            3.边界和初始情况处理
                f(0) = a[0]
            4.计算顺序
                从小到大
       */
        function Max(nums){
            // 初始化，这里直接对原数组进行操作就可，节约内存
            // 转移方程
            let len = nums.length
            for(let i = 1; i < len; i++){
                if(nums[i - 1] > 0){
                    nums[i] += nums[i - 1]
                }
            }
            return Math.max(...nums)
        }
    </script>
</body>
</html>